home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / Tool Chest / Development Tools & Languages / • Other Platforms / PCCTS / testcpp / 5 / test.g < prev   
Encoding:
Text File  |  1994-09-14  |  1.2 KB  |  70 lines  |  [TEXT/MPS ]

  1. /* This is test.g which tests multiple scanners/parsers; DLG-based scanner */
  2. <<
  3. #include "Lexer.h"
  4. typedef ANTLRCommonToken ANTLRToken;
  5.  
  6. main()
  7. {
  8.     ANTLRToken aToken;
  9.     DLGFileInput in(stdin);
  10.     Lexer scan(&in,2000);
  11.     scan.setToken(&aToken);
  12.     ANTLRTokenBuffer pipe(&scan);
  13.     Include parser(&pipe);
  14.     parser.init();
  15.  
  16.     parser.input();
  17. }
  18. >>
  19.  
  20. #token "[\ \t\n]+"    <<skip();>>
  21. #token Eof "@"
  22.  
  23. class Include {
  24.  
  25. <<
  26. /* this is automatically defined to be a member function of Include::
  27.  * since it is within the "class {...}" boundaries.
  28.  */
  29. private:
  30. char *stripquotes(ANTLRChar *s)
  31. {
  32.     s[strlen(s)-1] = '\0';
  33.     return &s[1];
  34. }
  35. >>
  36.  
  37. input
  38.     :    ( cmd | include )* Eof
  39.     ;
  40.  
  41. cmd    :    "print"
  42.         (    NUMBER        <<printf("%s\n", $1->getText());>>
  43.         |    STRING        <<printf("%s\n", $1->getText());>>
  44.         )
  45.     ;
  46.  
  47. include
  48.     :    "#include" STRING
  49.         <<{
  50.         FILE *f;
  51.         f = fopen(stripquotes($2->getText()), "r");
  52.         if ( f==NULL ) {fprintf(stderr, "can't open %s\n", $2->getText()+1);}
  53.         else {
  54.             ANTLRToken aToken;
  55.             DLGFileInput in(f);
  56.             Lexer scan(&in,2000);
  57.             scan.setToken(&aToken);
  58.             ANTLRTokenBuffer pipe(&scan);
  59.             Include parser(&pipe);
  60.             parser.init();
  61.             parser.input();
  62.         }
  63.         }>>
  64.     ;
  65.  
  66. }
  67.  
  68. #token STRING    "\" [a-zA-Z0-9_.,\ \t]+ \""
  69. #token NUMBER    "[0-9]+"
  70.